/*
 * @Date: 2024-05-11 15:53:59
 * @Author: LiSong
 * @LastEditors: LiSong
 * @LastEditTime: 2024-05-16 11:04:09
 * @Description: 这是一个数字处理的相关工具类
*/

import XEUtils from "xe-utils"

const NumberUtils = {
  /**
   * 格式化数字数据
   * 
   * @param {Number|String} value 数据
   * @param {Number} digits 保留小数的位数
   * @returns {Number} 格式化以后的数据
   */
  formatValue (value, digits=2) {
    return value ? XEUtils.round(XEUtils.toNumber(value), digits) || 0 : 0
  },
  /**
   * 格式化数字数据（千分位分隔）
   * 
   * @param {Number} value 数据
   * @param {Object} config 参数 { digits:保留小数的位数 fillZero:是否补齐0}
   * @returns {String} 格式化以后的数据
   */
  formatValueThousand (value, config) {
    let digits=2, fillZero=true
    if (config) {
      digits = config.digits || digits
      if (config.hasOwnProperty('fillZero')) {
        fillZero = config.fillZero
      }
    }
    value = this.formatValue(value)
    value = XEUtils.commafy(value, { digits })
    return fillZero ? value : value.replace(/(\.[\d]*?)0+$/, '$1')
  },
  /**
   * 加法运算
   * 
   * @param {Number} v1 加数1
   * @param {Number} v2 加数1
   * @returns {Number} 计算结果
   */
  mathAdd (v1, v2) {
    let v = XEUtils.add(XEUtils.toNumber(v1), XEUtils.toNumber(v2))
    return this.formatValue(v)
  },
  /**
   * 减法运算
   * 
   * @param {Number} v1 减数
   * @param {Number} v2 被减数
   * @returns {Number} 计算结果
   */
  mathSub (v1, v2) {
    let v = XEUtils.subtract(XEUtils.toNumber(v1), XEUtils.toNumber(v2))
    return this.formatValue(v)
  },
  /**
   * 乘法运算
   * 
   * @param {Number} v1 乘数
   * @param {Number} v2 被乘数
   * @returns {Number} 计算结果
   */
  mathMul (v1, v2) {
    let v = XEUtils.multiply(XEUtils.toNumber(v1), XEUtils.toNumber(v2))
    return this.formatValue(v)
  },
  /**
   * 除法运算
   * 
   * @param {Number} v1 除数
   * @param {Number} v2 被除数
   * @returns {Number} 计算结果
   */
  mathDiv (v1, v2) {
    let v = XEUtils.divide(XEUtils.toNumber(v1), XEUtils.toNumber(v2))
    return this.formatValue(v)
  },
}
export default NumberUtils